package cn.sytton.taffe.web.flw.service;

import cn.sytton.taffe.framework.base.entity.PageParam;
import cn.sytton.taffe.framework.base.service.IBaseService;
import cn.sytton.taffe.web.flw.entity.FlowDefEntity;
import cn.sytton.taffe.web.flw.service.impl.FlowDefService;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;

/**
 * 流程定义 服务层接口
 *
 * @author skyrock
 */
public interface IFlowDefService extends IBaseService<FlowDefEntity> {

    /**
     * 部署流程
     * @param entity
     */
    void deploy(FlowDefEntity entity);

    /**
     * 查询流程定义的Xml
     * @param deploymentId
     */
    String findXml(String deploymentId);

    /**
     * 根据key查询流程定义的Xml
     * @param key
     * @return
     */
    String findXmlByKey(String key);

    /**
     * 获取所有流程及所有版本
     * @return
     */
    Map<String, List<FlowDefEntity>> findDefList();

    /**
     * 通过key查询流程版本
     * @param key
     * @return
     */
    List<FlowDefEntity> findVersionListByKey(String key);

    /**
     * 通过key查询流程版本
     * @param pp
     * @return
     */
    PageInfo<FlowDefEntity> findDefPage(PageParam pp);

    /**
     * 检查key是否存在
     * @param key
     * @return
     */
    Boolean checkKey(String key);

    /**
     * 检查name是否存在
     * @param name
     * @return
     */
    Boolean checkName(String name);

    /**
     * 根据流程Key查询流程的UserTask
     * @param key
     * @return
     */
    List<FlowDefService.FlowUserTask> findUserTaskByDefKey(String key);

    /**
     * 根据流程Id查询流程的UserTask
     * @param id
     * @return
     */
    List<FlowDefService.FlowUserTask> findUserTaskByDefId(String id);
}
